#!/bin/bash

# 该脚本用于检查用户是否存在
# 提供了多种实现方法:
# 1. 使用getent命令检查
# 2. 使用sed命令检查/etc/passwd文件
# 3. 使用id命令检查
# 4. 使用grep命令检查/etc/passwd文件

# 方法1: 使用getent命令检查用户是否存在
check_user_by_getent() {
    local username=$1
    if getent passwd "$username" >/dev/null 2>&1; then
        echo "用户 [$username] 已存在(使用getent检查)"
    else
        echo "用户 [$username] 不存在(使用getent检查)"
    fi
}

# 方法2: 使用sed命令检查/etc/passwd文件
check_user_by_sed() {
    local username=$1
    if [ "$(sed -n "/^$username/p" /etc/passwd)" ]; then
        echo "用户 [$username] 已存在(使用sed检查)"
    else
        echo "用户 [$username] 不存在(使用sed检查)"
    fi
}

# 方法3: 使用id命令检查用户是否存在
check_user_by_id() {
    local username=$1
    if id "$username" >/dev/null 2>&1; then
        echo "用户 [$username] 已存在(使用id检查)"
    else
        echo "用户 [$username] 不存在(使用id检查)"
    fi
}

# 方法4: 使用grep命令检查/etc/passwd文件
check_user_by_grep() {
    local username=$1
    if grep "^$username:" /etc/passwd >/dev/null 2>&1; then
        echo "用户 [$username] 已存在(使用grep检查)"
    else
        echo "用户 [$username] 不存在(使用grep检查)"
    fi
}

# 主函数:显示菜单并处理用户选择
main() {
    # 设置默认用户名
    local username=${1:-"root"}

    echo "请选择检查用户存在的方法:"
    echo "1) 使用getent命令检查"
    echo "2) 使用sed命令检查"
    echo "3) 使用id命令检查"
    echo "4) 使用grep命令检查"
    echo "5) 使用所有方法检查"
    read -p "请输入选择(1-5): " choice

    case $choice in
        1) check_user_by_getent "$username" ;;
        2) check_user_by_sed "$username" ;;
        3) check_user_by_id "$username" ;;
        4) check_user_by_grep "$username" ;;
        5)
            check_user_by_getent "$username"
            check_user_by_sed "$username"
            check_user_by_id "$username"
            check_user_by_grep "$username"
            ;;
        *) echo "无效的选择" ;;
    esac
}

# 检查脚本是否被直接执行
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
    main "$@"
fi
